﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Collections; //Bruges til at anvende iteratoren på lister
using System.Media; //Bruges til at afspille lyd

using Controller; //Vores Controller
using Interfaces; //Vores Interface


namespace GUI
{
    public partial class FrmHovedmenu : Form
    {
        //Attributter
        private LagerSystem lagersystem; //Aggregering af lagersystem (controller)
        private SoundPlayer lydafspiller; //Attribut

        //Konstruktør
        public FrmHovedmenu()
        {
            InitializeComponent();
            lydafspiller = new SoundPlayer("Sounds/fejllyd.wav");
            //try
            //{
            //    lagersystem = LagerSystem.HentData();
            //}
            //catch (Exception)
            //{
            //    MessageBox.Show("Ingen data indlæst");
            lagersystem = new LagerSystem();
            //    return;
            //}
        }

        //Metoder
        private void FrmHovedmenu_Load(object sender, EventArgs e)
        {
            opdaterlstminimum();
        }

        //Event handlers
        private void btnProdukt_Click(object sender, EventArgs e)
        {
            Form produktform = new frmProdukter(lagersystem);
            this.Hide();
            produktform.ShowDialog();
            opdaterlstminimum();
            this.Show();
            txtScanner.Focus();
        }

        private void btnLeverandør_Click(object sender, EventArgs e)
        {
            Form leverandørform = new frmLeverandører(lagersystem);
            this.Hide();
            leverandørform.ShowDialog();
            opdaterlstminimum();
            this.Show();
            txtScanner.Focus();
        }

        private void btnAccept_Click(object sender, EventArgs e)
        {
            string produktNr = txtScanner.Text;
            txtScanner.Clear();
            txtScanner.Focus();
            IProduktdata produktdata = lagersystem.HentProdukt(produktNr);
            
            if (produktdata == null)
	        {
                tssLblStatus.ForeColor = Color.DarkRed;
                tssLblStatus.Text = "Produkt ikke fundet!";
                lydafspiller.Play();
                return;
            }

            ListViewItem linie = new ListViewItem();
            linie.Text = produktdata.ProduktNr;
            linie.SubItems.Add(produktdata.Betegnelse);
            lstScan.Items.Add(linie);
            lstScan.EnsureVisible(lstScan.Items.Count - 1);
            tssLblStatus.ForeColor = Color.DarkGreen;
            tssLblStatus.Text = "Produkt indlæst.";
            lstScan.Columns[1].Width = -2;

            int index = -1;

            if (produktdata.Beholdning <= produktdata.MinimumBeholdning)
            {
                for (int i = 0; i < lstMinimumbeholdning.Items.Count; i++)
                {
                    if (lstMinimumbeholdning.Items[i].Text == produktdata.ProduktNr)
                    {
                        index = i;
                        break;
                    }
                }

                if (index >= 0)
                {
                    lstMinimumbeholdning.Items[index].SubItems[3].Text = produktdata.Beholdning.ToString();
                }
                else
                {
                    tilføjTilMinimumsLst(produktdata);
                    lstMinimumbeholdning.Columns[3].Width = -2;
                }
            }

        }

        private void btnUdskrivMinimum_Click(object sender, EventArgs e)
        {
            Form bestillingsRapport = new frmBestillingsRapport(lagersystem);
            this.Hide();
            bestillingsRapport.ShowDialog();
            this.Show();
            txtScanner.Focus();
        }

        //Private metoder
        private void opdaterlstminimum()
        {
            lstMinimumbeholdning.Items.Clear();

            IEnumerator produkteriterator;
            produkteriterator = lagersystem.GetProdukterUnderMinimumsBeholdning();
            produkteriterator.Reset();
            while (produkteriterator.MoveNext())
            {
                IProduktdata produktdata = (IProduktdata)produkteriterator.Current;
                tilføjTilMinimumsLst(produktdata);

            }
            lstMinimumbeholdning.Columns[3].Width = -2;
        }

        private void tilføjTilMinimumsLst(IProduktdata produktdata)
        {
            ListViewItem linie = new ListViewItem();
            linie.Text = produktdata.ProduktNr;
            linie.SubItems.Add(produktdata.Betegnelse);
            linie.SubItems.Add(produktdata.MinimumBeholdning.ToString());
            linie.SubItems.Add(produktdata.Beholdning.ToString());
            lstMinimumbeholdning.Items.Add(linie);
        }
    }
}
